package 双指针或滑动窗口.得到K个黑块的最少涂色次数2379;

public class Solution {
    /**
     * 计算并返回将字符串中的一段连续的'W'字符转换为'B'字符所需的最小转换次数.
     *
     * @param blocks 表示一系列黑白块的字符串，其中'W'代表白色块，'B'代表黑色块.
     * @param k      指定需要转换的连续块的长度.
     * @return 返回进行转换所需的最小次数.
     */
    public int minimumRecolors(String blocks, int k) {
        // 将输入的字符串转换为字符数组，以便逐个字符处理
        char[] chars = blocks.toCharArray();
        // 获取字符数组的长度
        int n = chars.length;
        // 初始化最小转换次数为最大整数值，以便后续进行最小值比较
        int minMs = Integer.MAX_VALUE;
        // 初始化转换计数器
        int count = 0;
        // 遍历字符数组
        for (int i = 0; i < n; i++) {
            // 如果当前字符是'W'，则增加转换计数
            if (chars[i] == 'W') {
                count++;
            }
            // 如果当前索引小于k-1，则继续下一次循环，跳过当前迭代
            if (i < k - 1) continue;
            // 更新最小转换次数
            minMs = Math.min(minMs, count);
            // 如果当前索引位置的字符是'W'，则减少转换计数，因为它将移出当前考虑的窗口
            if (chars[i - k + 1] == 'W') {
                count--;
            }
        }
        // 返回最小转换次数
        return minMs;
    }

}
